In a typical operating system build environment, code is compiled into binary form by a computer. Such an environment has no ability to use external resources for producing operating system runtime images. The build environment can support image creation internal to the computer, but then only can use a limited supply of valuable resources to satisfy the needs of creation of the final operating system image. For example, some existing environments dedicate and configure one computer for building a specific image (i.e., an operating system or application program). However, such systems are inefficient in that the dedicated computer is used solely for building the specific image (e.g., possibly once or twice a day). As such, each dedicated computer idles most of the time. Further, the amount of processing hardware needed grows as the number of different images to be created increases. For example, if images need to be built for six versions or configurations of seven different products, then forty-two dedicated computers are needed to build all the images. The cost of the initial hardware, maintenance, and support for the dedicated machines is substantial. There is a need for a system that can use external resources to create a software image. Further, there is a need for a system for building images that uses a small number of build computers efficiently. In addition, users experience delay and inconvenience as installation and configuration of the operating system are typically performed on an end user's computer. There is a need for a system in which installation and configuration occur during image creation.
Some existing systems allocate tasks to client computers for completion. For example, some existing systems implement distributed compiling in which client computers compile a portion of an application program and a central server links the compiled portions together as the application program. In another example, the SETI@home project distributes tasks to client computers for the analysis of data in search of extraterrestrial life. However, in such systems, the client computers do not create a final product. Further, such systems are not related to the creation of an installed software image.
Accordingly, a system for a distributed build environment for software images is desired to address one or more of these and other disadvantages.